<!-- 查看答题记录页面 -->
<template>
  <div id="history">
    <!--顶部信息栏-->
    <div class="top">
      <ul class="item">
        <li>
          <i
            class="iconfont icon-menufold icon20"
            ref="toggle"
            @click="slider_flag = !slider_flag"
          ></i>
        </li>
        <li>
          <i class="el-icon-a-061" style="font-size: 32px;">
            {{ examData.type }}-{{ examData.source }}
          </i>
        </li>
        <li @click="flag = !flag" style="cursor: pointer">
          <i class="iconfont icon-user icon20"></i>
          <div class="msg" v-if="flag" @click="flag = !flag">
            <p>姓名：{{ userInfo.name }}</p>
            <p>准考证号: {{ userInfo.id }}</p>
          </div>
        </li>
        <li><i class="iconfont icon-arrLeft icon20"></i></li>
      </ul>
    </div>
    <div class="flexarea">
      <!--左边题目编号区-->
      <transition name="slider-fade">
        <div class="left" v-if="slider_flag">
          <ul class="l-top">
            <li>
              <a href="javascript:;"></a>
              <span>当前</span>
            </li>
            <li>
              <a href="javascript:;"></a>
              <span>未答</span>
            </li>
            <li>
              <a href="javascript:;"></a>
              <span>已答</span>
            </li>
            <li>
              <a href="javascript:;"></a>
              <span>标记</span>
            </li>
          </ul>
          <div class="l-bottom">
            <div class="item">
              <p>选择题部分</p>
              <ul>
                <li
                  v-for="(list, index1) in topic[1]"
                  :key="index1">
                  <a href="javascript:;" @click="change(index1)"
                    :class="{border:index == index1 && currentType == 1,
                             bg: bg_flag && topic[1][index1].isClick == true,}">
                                        <span :class="{mark:topic[1][index1].isMark == true,}"></span>
                    {{ index1 + 1 }}
                  </a>
                </li>
              </ul>
            </div>
            <div class="item">
              <p>填空题部分</p>
              <ul>
                <li
                  v-for="(list, index2) in topic[2]"
                  :key="index2"
                >
                  <a
                    href="javascript:;"
                    @click="fill(index2)"
                    :class="{
                                            border:
                                                index == index2 &&
                                                currentType == 2,
                                            bg: fillAnswer[index2][10] == true,
                                        }"
                  ><span
                    :class="{
                                                mark:
                                                    topic[2][index2].isMark ==
                                                    true,
                                            }"
                  ></span
                  >{{ topicCount[0] + index2 + 1 }}</a
                  >
                </li>
              </ul>
            </div>
            <div class="item">
              <p>判断题部分</p>
              <ul>
                <li
                  v-for="(list, index3) in topic[3]"
                  :key="index3"
                >
                  <a
                    href="javascript:;"
                    @click="judge(index3)"
                    :class="{
                                            border:
                                                index == index3 &&
                                                currentType == 3,
                                            bg:
                                                bg_flag &&
                                                topic[3][index3].isClick ==
                                                    true,
                                        }"
                  ><span
                    :class="{
                                                mark:
                                                    topic[3][index3].isMark ==
                                                    true,
                                            }"
                  ></span
                  >{{
                      topicCount[0] +
                      topicCount[1] +
                      index3 +
                      1
                    }}</a
                  >
                </li>
              </ul>
            </div>
            <el-button type="primary" style="width: 100%;font-size: 22px;margin: 25px 0 0 0;" icon="el-icon-a-061" @click="goScoreTable">返回成绩</el-button>
          </div>
        </div>
      </transition>
      <!--右边选择答题区-->
      <transition name="slider-fade">
        <div class="right">
          <div class="title">
            <p>{{ title }}</p>
            <i class="iconfont icon-right auto-right"></i>
            <span
            >全卷共{{
                topicCount[0] + topicCount[1] + topicCount[2]
              }}题
                            <span v-if="!isPractice">
                                <i class="iconfont icon-time"></i>倒计时：<b>{{
                                time
                              }}</b
                            >分钟</span
                            >
                        </span>
          </div>
          <div class="content">
            <p class="topic">
                            <span class="number">{{ number }}</span
                            >{{ showQuestion }}
            </p>
            <div v-if="currentType == 1">
              <el-radio-group
                v-model="radio[index]"
                @change="getChangeLabel"
              >
                <el-radio disabled :label="1" >{{
                    showAnswer.answerA
                  }}</el-radio>
                <el-radio disabled :label="2">{{
                    showAnswer.answerB
                  }}</el-radio>
                <el-radio disabled :label="3">{{
                    showAnswer.answerC
                  }}</el-radio>
                <el-radio disabled :label="4">{{
                    showAnswer.answerD
                  }}</el-radio>
              </el-radio-group>
              <div
                class="analysis"
                v-if="isPractice && radio[index] != undefined"
              >
                <ul>
                  <li>
                    <el-tag type="success"
                    >正确答案：</el-tag
                    ><span class="right">{{
                      reduceAnswer.rightAnswer
                    }}</span>
                  </li>
                  <li><el-tag>题目解析：</el-tag></li>
                  <li>
                    {{
                      reduceAnswer.analysis == null
                        ? "暂无解析"
                        : reduceAnswer.analysis
                    }}
                  </li>
                </ul>
              </div>
            </div>
            <div class="fill" v-if="currentType == 2">
              <div
                v-for="(item, currentIndex) in part"
                :key="currentIndex"
              >
                <el-input
                  disabled
                  placeholder="请填在此处"
                  v-model="fillAnswer[index][currentIndex]"
                  clearable
                  @blur="fillBG"
                >
                </el-input>
              </div>
              <div
                class="analysis"
                v-if="
                                    isPractice &&
                                    fillAnswer[index][0] != undefined
                                "
              >
                <ul>
                  <li>
                    <el-tag type="success"
                    >正确答案：</el-tag
                    ><span class="right">{{
                      topic[2][index].answer
                    }}</span>
                  </li>
                  <li><el-tag>题目解析：</el-tag></li>
                  <li>
                    {{
                      topic[2][index].analysis == null
                        ? "暂无解析"
                        : topic[2][index].analysis
                    }}
                  </li>
                </ul>
              </div>
            </div>
            <div class="judge" v-if="currentType == 3">
              <el-radio-group
                v-model="judgeAnswer[index]"
                @change="getJudgeLabel"
                v-if="currentType == 3"
              >
                <el-radio disabled :label="1">正确</el-radio>
                <el-radio disabled :label="2">错误</el-radio>
              </el-radio-group>
              <div
                class="analysis"
                v-if="
                                    isPractice &&
                                    judgeAnswer[index] != undefined
                                "
              >
                <ul>
                  <li>
                    <el-tag type="success"
                    >正确答案：</el-tag
                    ><span class="right">{{
                      topic[3][index].answer == "T"
                        ? "正确"
                        : "错误"
                    }}</span>
                  </li>
                  <li><el-tag>题目解析：</el-tag></li>
                  <li>
                    {{
                      topic[3][index].analysis == null
                        ? "暂无解析"
                        : topic[3][index].analysis
                    }}
                  </li>
                </ul>
              </div>
            </div>
          </div>
          <div class="operation">
            <ul class="end">
              <li @click="previous()">
                <i class="iconfont icon-previous"></i
                ><span>上一题</span>
              </li>
              <li @click="mark()">
                <i class="el-icon-a-02"></i
                ><span>标记</span>
              </li>
              <li @click="next()">
                                <span>下一题</span
                                ><i class="iconfont icon-next"></i>
              </li>
            </ul>
          </div>
        </div>
      </transition>
    </div>
  </div>
</template>

<script>
import { mapState } from "vuex";
export default {
  data() {
    return {
      isPractice: false, //显示解析
      startTime: null, //考试开始时间
      endTime: null, //考试结束时间
      time: null, //考试持续时间
      reduceAnswer: [], //vue官方不支持3层以上数据嵌套,如嵌套则会数据渲染出现问题,此变量直接接收3层嵌套时的数据。
      answerScore: 0, //答题总分数
      bg_flag: false, //已答标识符,已答改变背景色
      isFillClick: false, //选择题是否点击标识符
      slider_flag: true, //左侧显示隐藏标识符
      flag: false, //个人信息显示隐藏标识符
      currentType: 1, //当前题型类型  1--选择题  2--填空题  3--判断题
      radio: [], //保存考生所有选择题的选项
      title: "请选择正确的选项",
      index: 0, //全局index
      userInfo: {
        //用户信息
        name: null,
        id: null,
      },
      topicCount: [], //每种类型题目的总数
      score: [], //每种类型分数的总数
      examData: {
        //考试信息
        // source: null,
        // totalScore: null,
      },
      topic: {
        //试卷信息
      },
      showQuestion: [], //当前显示题目信息
      showAnswer: {}, //当前题目对应的答案选项
      number: 1, //题号
      part: null, //填空题的空格数量
      fillAnswer: [[]], //二维数组保存所有填空题答案
      judgeAnswer: [], //保存所有判断题答案
      topic1Answer: [], //学生选择题作答编号,
      rightAnswer: "",
      timer: "",
    };
  },
  created() {
    this.getCookies();
    this.getExamData();
  },
  methods: {

    goScoreTable() {
      this.$router.push({ path: "/scoreTable" });
    },
    getCookies() {
      //获取cookie
      this.userInfo.name = this.$cookies.get("cname");
      this.userInfo.id = this.$cookies.get("cid");
    },

    getExamData() {
      //获取当前试卷所有信息
      let scoreId = this.$route.query.scoreId; //获取路由传递过来的成绩
      this.$axios(`/api/scoresHistory/${scoreId}`).then((res) => {
        //通过examCode请求试卷详细信息
        this.examData = { ...res.data.data }; //获取考试详情
        // 试卷标题
        this.examData.type = this.examData.score.etype;
        this.examData.source = this.examData.score.subject;

        this.index = 0;
        this.reduceAnswer = this.examData.multis[this.index]

        this.topic[1] = this.examData.multis;
        this.topic[2] = this.examData.fills;
        this.topic[3] = this.examData.judges;

        let keys = Object.keys(this.topic);
          keys.forEach((e) => {
            let data = this.topic[e];
            this.topicCount.push(data.length);
            let currentScore = 0;
            for (let i = 0; i < data.length; i++) {
              //循环每种题型,计算出总分
              currentScore += data[i].score;
            }
            this.score.push(currentScore); //把每种题型总分存入score
          });
        let len = this.topicCount[1];
          let father = [];
          for (let i = 0; i < len; i++) {
            //根据填空题数量创建二维空数组存放每道题答案
            let children = [null, null, null, null];
            father.push(children);
          }
          this.fillAnswer = father;
          let dataInit = this.topic[1];
          this.number = 1;
          this.showQuestion = dataInit[0].question;
          this.showAnswer = dataInit[0];
          // 回显第一个选中题
          this.radio[0] = this.optionToCode(this.showAnswer.fillIn)
          // 显示题目解析
          this.isPractice = true
      });
    },

    optionToCode(option) {
      var code = 0;
      switch (option) {
        case 't':
        case 'T':
        case 'a':
        case 'A':
          code = 1;
          break;
        case 'f':
        case 'F':
        case 'b':
        case 'B':
          code = 2;
          break;
        case 'c':
        case 'C':
          code = 3;
          break;
        case 'd':
        case 'D':
          code = 4;
      }
      return code;
    },

    change(index) {
      //选择题
      this.index = index;
      let reduceAnswer = this.topic[1][this.index];
      this.reduceAnswer = reduceAnswer;
      this.isFillClick = true;
      this.currentType = 1;
      let len = this.topic[1].length;
      if (this.index < len) {
        if (this.index <= 0) {
          this.index = 0;
        }

        this.title = "请选择正确的选项";
        let Data = this.topic[1];
        this.showQuestion = Data[this.index].question; //获取题目信息
        this.showAnswer = Data[this.index];
        this.number = this.index + 1;
      } else if (this.index >= len) {
        this.index = 0;
        this.fill(this.index);
      }

      this.radio[this.index] = this.optionToCode(this.reduceAnswer.fillIn)
    },
    fillBG() {
      //填空题已答题目 如果已答该题目,设置第四个元素为true为标识符
      if (this.fillAnswer[this.index][0] != null) {
        this.fillAnswer[this.index][10] = true;
      }
    },
    fill(index) {
      //填空题
      let len = this.topic[2].length;
      this.currentType = 2;
      this.index = index;
      if (index < len) {
        if (index < 0) {
          index = this.topic[1].length - 1;
          this.change(index);
        } else {
          this.title = "请在横线处填写答案";
          let Data = this.topic[2];
          this.showQuestion = Data[index].question; //获取题目信息
          let part = this.showQuestion.split("()").length - 1; //根据题目中括号的数量确定填空横线数量
          this.part = part;
          this.number = this.topicCount[0] + index + 1;
          if (Data[index].fillIn != null && Data[index].fillIn != undefined) {
            let fillInDataArrays = Data[index].fillIn.split("|");
            for (var i = 0; i < fillInDataArrays.length; i ++) {
              this.fillAnswer[index][i] = fillInDataArrays[i];
              // this.fillAnswer[index][10] = true;
            }
          }
        }
      } else if (index >= len) {
        this.index = 0;
        this.judge(this.index);
      }
    },
    judge(index) {
      //判断题
      let len = this.topic[3].length;
      this.currentType = 3;
      this.index = index;
      if (this.index < len) {
        if (this.index < 0) {
          this.index = this.topic[2].length - 1;
          this.fill(this.index);
        } else {
          this.title = "请作出正确判断";
          let Data = this.topic[3];
          this.showQuestion = Data[index].question; //获取题目信息
          this.number = this.topicCount[0] + this.topicCount[1] + index + 1;
          this.judgeAnswer[this.index] = this.optionToCode(Data[index].fillIn);
        }
      } else if (this.index >= len) {
        this.index = 0;
        this.change(this.index);
      }

    },
    getChangeLabel(val) {
      //获取选择题作答选项
      this.radio[this.index] = val; //当前选择的序号
      if (val) {
        let data = this.topic[1];
        this.bg_flag = true;
        data[this.index]["isClick"] = true;
      }
      /* 保存学生答题选项 */
      this.topic1Answer[this.index] = val;
    },
    getJudgeLabel(val) {
      //获取判断题作答选项
      this.judgeAnswer[this.index] = val;
      if (val) {
        let data = this.topic[3];
        this.bg_flag = true;
        data[this.index]["isClick"] = true;
      }
    },
    previous() {
      //上一题
      this.index--;
      switch (this.currentType) {
        case 1:
          this.change(this.index);
          break;
        case 2:
          this.fill(this.index);
          break;
        case 3:
          this.judge(this.index);
          break;
      }
    },
    next() {
      //下一题
      this.index++;
      switch (this.currentType) {
        case 1:
          this.change(this.index);
          break;
        case 2:
          this.fill(this.index);
          break;
        case 3:
          this.judge(this.index);
          break;
      }
    },
    mark() {
      //标记功能
      switch (this.currentType) {
        case 1:
          this.topic[1][this.index]["isMark"] = true; //选择题标记
          break;
        case 2:
          this.topic[2][this.index]["isMark"] = true; //填空题标记
          break;
        case 3:
          this.topic[3][this.index]["isMark"] = true; //判断题标记
      }
    }
  },
  // computed: mapState(["isPractice"]),
};
</script>

<style lang="less">
.iconfont.icon-time {
  color: CornflowerBlue;
  margin: 0px 6px 0px 20px;
}
.analysis {
  margin-top: 20px;
  .right {
    color: #2776df;
    font-size: 18px;
    border: 1px solid #2776df;
    padding: 0px 6px;
    border-radius: 4px;
    margin-left: 20px;
  }
  ul li:nth-child(2) {
    margin: 20px 0px;
  }
  ul li:nth-child(3) {
    padding: 10px;
    background-color: #d3c6c9;
    border-radius: 4px;
  }
}
.analysis span:nth-child(1) {
  font-size: 18px;
}
.mark {
  position: absolute;
  width: 4px;
  height: 4px;
  content: "";
  background-color: red;
  border-radius: 50%;
  top: 0px;
  left: 22px;
}
.border {
  position: relative;
  border: 1px solid #ff90aa !important;
}
.bg {
  background-color: #5188b8 !important;
}
.fill .el-input {
  display: inline-flex;
  width: 150px;
  margin-left: 20px;
  .el-input__inner {
    border: 1px solid transparent;
    border-bottom: 1px solid #eee;
    padding-left: 20px;
  }
}
/* slider过渡效果 */
.slider-fade-enter-active {
  transition: all 0.3s ease;
}
.slider-fade-leave-active {
  transition: all 0.3s cubic-bezier(1, 0.5, 0.8, 1);
}
.slider-fade-enter,
.slider-fade-leave-to {
  transform: translateX(-100px);
  opacity: 0;
}

.operation .end li:nth-child(2) {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  background-color: CornflowerBlue;
  border-radius: 50%;
  width: 50px;
  height: 50px;
  color: #fff;
}
.operation .end li {
  cursor: pointer;
  margin: 0 100px;
}
.operation {
  background-color: #fff;
  border-radius: 4px;
  padding: 10px 0px;
  margin-right: 10px;
}
.operation .end {
  display: flex;
  justify-content: center;
  align-items: center;
  color: CornflowerBlue;
}
.content .number {
  display: inline-flex;
  justify-content: center;
  align-items: center;
  width: 20px;
  height: 20px;
  background-color: CornflowerBlue;
  border-radius: 4px;
  margin-right: 4px;
}
.content {
  padding: 0px 20px;
}
.content .topic {
  padding: 20px 0px;
  padding-top: 30px;
}
.right .content {
  background-color: #fff;
  margin: 10px;
  margin-left: 0px;
  height: 470px;
}
.content .el-radio-group label {
  color: #000;
  margin: 5px 0px;
}
.content .el-radio-group {
  display: flex;
  flex-direction: column;
}
.right .title p {
  margin-left: 20px;
}
.flexarea {
  display: flex;
}
.flexarea .right {
  flex: 1;
}
.auto-right {
  margin-left: auto;
  color: #2776df;
  margin-right: 10px;
}
.right .title {
  margin-right: 10px;
  padding-right: 30px;
  display: flex;
  margin-top: 10px;
  background-color: #fff;
  height: 50px;
  line-height: 50px;
}
.clearfix {
  clear: both;
}
.l-bottom .final {
  cursor: pointer;
  display: inline-block;
  text-align: center;
  background-color: CornflowerBlue;
  width: 240px;
  margin: 20px 0px 20px 10px;
  border-radius: 4px;
  height: 30px;
  line-height: 30px;
  color: #fff;
  margin-top: 22px;
}
#history .left .item {
  padding: 0px;
  font-size: 16px;
}
.l-bottom {
  border-radius: 4px;
  background-color: #fff;
}
.l-bottom .item p {
  margin-bottom: 15px;
  margin-top: 10px;
  color: #000;
  margin-left: 10px;
  letter-spacing: 2px;
}
.l-bottom .item li {
  width: 15%;
  margin-left: 5px;
  margin-bottom: 10px;
}
.l-bottom .item {
  display: flex;
  flex-direction: column;
}
.l-bottom .item ul {
  width: 100%;
  margin-bottom: -8px;
  display: flex;
  justify-content: space-around;
  flex-wrap: wrap;
}
.l-bottom .item ul li a {
  position: relative;
  justify-content: center;
  display: inline-flex;
  align-items: center;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background-color: #fff;
  border: 1px solid #eee;
  text-align: center;
  color: #000;
  font-size: 16px;
}
.left .l-top {
  display: flex;
  justify-content: space-around;
  padding: 16px 0px;
  border: 1px solid #eee;
  border-radius: 4px;
  margin-bottom: 10px;
  background-color: #fff;
}
.left {
  width: 260px;
  height: 100%;
  margin: 10px 10px 0px 10px;
}
.left .l-top li:nth-child(2) a {
  border: 1px solid #eee;
}
.left .l-top li:nth-child(3) a {
  background-color: #5188b8;
  border: none;
}
.left .l-top li:nth-child(4) a {
  position: relative;
  border: 1px solid #eee;
}
.left .l-top li:nth-child(4) a::before {
  width: 4px;
  height: 4px;
  content: " ";
  position: absolute;
  background-color: red;
  border-radius: 50%;
  top: 0px;
  left: 16px;
}
.left .l-top li {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
}
.left .l-top li a {
  display: inline-block;
  padding: 10px;
  border-radius: 50%;
  background-color: #fff;
  border: 1px solid #ff90aa;
}
#history .top {
  background-color: CornflowerBlue;
}
#history .item {
  color: #fff;
  display: flex;
  padding: 20px;
  font-size: 20px;
}
#history .top .item li:nth-child(1) {
  margin-right: 10px;
}
#history .top .item li:nth-child(3) {
  position: relative;
  margin-left: auto;
}
#history {
  padding-bottom: 30px;
}
.icon20 {
  font-size: 20px;
  font-weight: bold;
}
.item .msg {
  padding: 10px 15px;
  border-radius: 4px;
  top: 47px;
  right: -30px;
  color: #6c757d;
  position: absolute;
  border: 1px solid rgba(0, 0, 0, 0.15);
  background-color: #fff;
}
.item .msg p {
  font-size: 16px;
  width: 200px;
  text-align: left;
}
</style>
